/ / TSQL - Parameter und dynamische Tabellennamen - sql, sql-server, tsql

TSQL - Parameter und dynamische Tabellennamen - sql, sql-server, tsql

Bitte sehen Sie die DDL unten:

CREATE TABLE Person (ID int identity, Name varchar(30), primary key(ID))
INSERT INTO Person (Name) VALUES ("Ian")

Bitte sehen Sie die TSQL unten:

Declare @ID int
Declare @Name varchar(30)
set @Name = "Ian"
select @ID=ID FROM Person WHERE Name=@Name
Print @ID

Dies funktioniert wie erwartet, dh 1 wird auf dem Bildschirm ausgegeben. Ich möchte eine Änderung vornehmen, damit der Tabellenname dynamisch ist, d. H.

Declare @ID int
Declare @Name varchar(30)
Declare @TableName as varchar(30)
set @TableName= "Person"
set @Name = "Ian"
select @ID=ID FROM @TableName WHERE Name=@Name
Print @ID

Das obige SQL funktioniert offensichtlich nicht. Mir ist klar, dass ich TSQL verwenden muss. Ich habe versucht, EXEC und sp_executesql zu verwenden, aber ich kann nur einen Teil davon bekommen. Wie kann ich das umsetzen? Die SQL-Anweisung muss Folgendes sein: select @ID=ID FROM @TableName WHERE Name=@Name.

Antworten:

1 für die Antwort № 1

Dazu müssen Sie dynamische SQL verwenden. Schau mal hier ...

Declare @ID int
Declare @Name varchar(30)
Declare @TableName sysname
DECLARE @Sql NVARCHAR(MAX);


set @TableName= "Person"
set @Name = "Ian"

SET @Sql = N"select @ID = ID FROM " + QUOTENAME(@TableName)
+ N" WHERE Name = @Name"

EXECUTE sp_executesql @Sql
,N"@ID int OUTPUT, @Name varchar(30)"
,@ID OUTPUT
,@Name
PRINT @ID