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 № 1Dazu 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